home *** CD-ROM | disk | FTP | other *** search
- #include "../CGVPMacro.csi"
-
- PS20Only
-
- MainInput { uniform sampler2D baseMap : register(s0),
- uniform sampler2D bumpMap : register(s1),
- uniform samplerCUBE envMap : register(s2),
- uniform float4 Diffuse,
- uniform float4 Specular,
- uniform float4 Params,
- uniform float4 SparkleDistort,
- uniform float4 SparkleColor,
- uniform float4 BaseColor }
- DeclarationsScript
- {
- OUT_T0_T1_T2_T3_T4_T5_T6_C0
- FOUT
- }
- CoreScript
- {
- // load the decal
- float4 decalColor = tex2D(baseMap, IN.Tex0.xy);
- // load the bump normal
- float4 bumpNormal = 2*(tex2D(bumpMap, IN.Tex1.xy)-0.5);
- // load the env map
- float4 envColor = texCUBE(envMap, IN.Tex2.xyz);
-
- // Increase the microflake perturbed normal a bit
- bumpNormal.xyz = lerp(float3(0,0,1), bumpNormal.xyz, Params.x);
- //bumpNormal.xyz = normalize(bumpNormal.xyz);
-
- float3x3 worldTangentSpace;
- worldTangentSpace[0] = IN.Tex3.xyz;
- worldTangentSpace[1] = IN.Tex4.xyz;
- worldTangentSpace[2] = IN.Tex5.xyz;
-
- float3 viewVec = normalize(IN.Tex6.xyz);
- float NdotE = dot(bumpNormal.xyz, viewVec);
- float3 reflectVect = (2.0*NdotE*bumpNormal.xyz)-(dot(bumpNormal.xyz, bumpNormal.xyz)*viewVec);
- float3 worldReflectVec = mul(reflectVect, worldTangentSpace);
-
- envColor.xyz = envColor.xyz * envColor.a * 8;
-
- // load the env map
- float4 envColorNoise = texCUBE(envMap, worldReflectVec.xyz);
- envColorNoise.xyz = saturate(envColorNoise.xyz * envColorNoise.a);
-
- // load the bump normal
- float4 bumpNormal2 = tex2D(bumpMap, IN.Tex1.xy);
-
- // Compute (1-N.V)^2
- float fAtten = ((1-IN.Color.b) * (1-IN.Color.b)) + 0.255;
- // Simulate color scattering
- float3 scatt = lerp(IN.Color.b, NdotE, SparkleDistort.xyz);
- // Combine resulting color with base color
- float3 color = scatt * 2 * BaseColor.xyz;
- // Combine sparkles with base color gradient
- color.xyz = bumpNormal2.xyz * envColorNoise.xyz * envColor.xyz + color.xyz;
- // Add reflections from the environment map
- color.xyz = lerp(color.xyz, envColor.xyz, fAtten);
-
- OUT.Color.xyz = color.xyz;
- OUT.Color.a = envColorNoise.a * SparkleColor.a * BaseColor.a;
- }
-
-